System and method for communicating a software-generated pulse waveform between two servers in a network

ABSTRACT

A method of monitoring a status condition of a first server with a second server in a server network, and also providing synchronization and messaging between the two servers, the method including: transmitting a software-generated pulse waveform from the first server to a device coupled to the first server, wherein the software-generated pulse waveform is comprises a first command corresponding to a logic level low and a second command corresponding to a logic level high; setting said device to a first state during logic level lows of said pulse waveform and to a second state during logic level highs of said pulse waveform; receiving the software-generated pulse waveform with the second server by determining when said device is in the first state and when it is in the second state; and determining when said device no longer changes from the first state to the second state. In order to provide synchronization and messaging, said pulse waveform is frequency modulated in order to communicate specified commands and/or reference points between the two servers.

RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.10/287,554, filed Nov. 1, 2002, now U.S. Pat. No. 6,895,526, which is acontinuation of U.S. patent application Ser. No. 09/658,333, filed Sep.8, 2000, now U.S. Pat. No. 6,523,131, which is a divisional of U.S.patent application Ser. No. 08/942,221, filed Oct. 1, 1997, now U.S.Pat. No. 6,163,853, which claims the benefit of U.S. ProvisionalApplication No. 60/046,327 filed May 13, 1997, the entirety of which arehereby incorporated herein by reference.

INCORPORATION BY REFERENCE OF COMMONLY OWNED APPLICATIONS

The following patent applications, commonly owned and filed Oct. 1,1997, are hereby incorporated herein in their entirety by referencethereto:

Application No./ Title Patent No. System Architecture for Remote Accessand Control of 08/942,160 Environmental Management 6,266,721 Method ofRemote Access and Control of Environmental 08/942,215 Management6,189,109 System for Independent Powering of Diagnostic Processes08/942,410 on a Computer System 6,202,160 Method of Independent Poweringof Diagnostic Processes 08/942,320 on a Computer System 6,134,668Diagnostic and Managing Distributed Processor System 08/942,4026,338,150 Method for Managing a Distributed Processor System 08/942,4486,249,885 System for Mapping Environmental Resources to Memory08/942,222 for Program Access 6,122,758 Method for Mapping EnvironmentalResources to Memory 08/942,214 for Program Access 6,199,173 Hot Add ofDevices Software Architecture 08/942,309 Method for The Hot Add ofDevices 08/942,306 6,247,080 Hot Swap of Devices Software Architecture08/942,311 6,192,434 Method for The Hot Swap of Devices 08/942,4576,304,929 Method for the Hot Add of a Network Adapter on a System08/943,072 Including a Dynamically Loaded Adapter Driver 5,892,928Method for the Hot Add of a Mass Storage Adapter on a 08/942,069 SystemIncluding a Statically Loaded Adapter Driver 6,219,734 Method for theHot Add of a Network Adapter on a System 08/942,465 Including aStatically Loaded Adapter Driver 6,202,111 Method for the Hot Add of aMass Storage Adapter on a 08/962,963 System Including a DynamicallyLoaded Adapter Driver 6,179,486 Method for the Hot Swap of a NetworkAdapter on a 08/943,078 System Including a Dynamically Loaded AdapterDriver 5,889,965 Method for the Hot Swap of a Mass Storage Adapter on a08/942,336 System Including a Statically Loaded Adapter Driver 6,249,828Method for the Hot Swap of a Network Adapter on a 08/942,459 SystemIncluding a Statically Loaded Adapter Driver 6,219,734 Method for theHot Swap of a Mass Storage Adapter on a 08/942,458 System Including aDynamically Loaded Adapter Driver 6,173,346 Method of Performing anExtensive Diagnostic Test in 08/942,463 Conjunction with a BIOS TestRoutine 6,035,420 Apparatus for Performing an Extensive Diagnostic Testin 08/942,163 Conjunction with a BIOS Test Routine 6,009,541Configuration Management Method for Hot Adding and 08/941,268 HotReplacing Devices 6,148,355 Configuration Management System for HotAdding and Hot 08/942,408 Replacing Devices 6,243,773 Apparatus forInterfacing Buses 08/942,382 6,182,180 Method for Interfacing Buses08/942,413 5,987,554 Computer Fan Speed Control Device 08/942,4475,990,582 Computer Fan Speed Control Method 08/942,216 5,962,933 Systemfor Powering Up and Powering Down a Server 08/943,076 6,122,746 Methodof Powering Up and Powering Down a Server 08/943,077 6,163,849 Systemfor Resetting a Server 08/942,333 6,065,053 Method of Resetting a Server08/942,405 6,330,690 System for Displaying Flight Recorder 08/942,0706,138,250 Method of Displaying Flight Recorder 08/942,068 6,073,255Synchronous Communication Interface 08/943,355 6,219,711 SynchronousCommunication Emulation 08/942,004 6,068,661 Software SystemFacilitating the Replacement or Insertion 08/942,317 of Devices in aComputer System 6,134,615 Method for Facilitating the Replacement orInsertion of 08/942,316 Devices in a Computer System 6,134,614 SystemManagement Graphical User Interface 08/943,357 Display of SystemInformation 08/942,195 6,046,742 Data Management System Supporting HotPlug Operations 08/942,129 on a Computer 6,105,089 Data ManagementMethod Supporting Hot Plug Operations 08/942,124 on a Computer 6,058,445Alert Configurator and Manager 08/942,005 6,425,006 Managing ComputerSystem Alerts 08/943,356 6,553,416 Computer Fan Speed Control System08/940,301 6,247,898 Computer Fan Speed Control System Method 08/941,2676,526,333 Black Box Recorder for Information System Events 08/942,3816,269,412 Method of Recording Information System Events 08/942,1646,282,673 Method for Automatically Reporting a System Failure in a08/942,168 Server 6,243,838 System for Automatically Reporting a SystemFailure in a 08/942,384 Server 6,170,067 Expansion of PCI Bus LoadingCapacity 08/942,404 6,249,834 Method for Expanding PCI Bus LoadingCapacity 08/942,223 6,195,717 System for Displaying System Status08/942,347 6,145,098 Method of Displaying System Status 08/942,0716,088,816 Fault Tolerant Computer System 08/942,194 6,175,490 Method forHot Swapping of Network Components 08/943,044 6,324,608 A Method forCommunicating a Software Generated Pulse 08/942,221 Waveform Between TwoServers in a Network 6,163,853 A System for Communicating a SoftwareGenerated Pulse 08/942,409 Waveform Between Two Servers in a Network6,272,648 Method for Clustering Software Applications 08/942,3186,134,673 System for Clustering Software Applications 08/942,4116,363,497 Method for Automatically Configuring a Server after Hot08/942,319 Add of a Device 6,212,585 System for AutomaticallyConfiguring a Server after Hot 08/942,331 Add of a Device 6,263,387Method of Automatically Configuring and Formatting a 08/942,412 ComputerSystem and Installing Software 6,154,835 System for AutomaticallyConfiguring and Formatting a 08/941,955 Computer System and InstallingSoftware 6,138,179 Determining Slot Numbers in a Computer 08/942,4626,269,417 System for Detecting Errors in a Network 08/942,169 6,208,616Method of Detecting Errors in a Network 08/940,302 6,052,733 System forDetecting Network Errors 08/942,407 6,105,151 Method of DetectingNetwork Errors 08/942,573 6,134,678

COPYRIGHT RIGHTS

A portion of the disclosure of this patent document contains materialwhich is subject to copyright protection. The copyright owner has noobjection to the facsimile reproduction by anyone of the patent documentor the patent disclosure, as it appears in the Patent and TrademarkOffice patent files or records, but otherwise reserves all copyrightrights whatsoever.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The invention relates to communications between two computer systems.More particularly, the invention relates to providing communicationsbetween two servers in a server network, for monitoring the operationalstatus of the servers, synchronizing events or actions initiated by theservers, and providing messaging capability between the two servers.

2. Description of the Related Art

As computer systems and networks become more complex, various systemsfor promoting fault tolerance in these networks have been developed. Onemethod of preventing network down-time due to the failure or removal ofa fileserver from a server network is to implement “server mirroring”.Server mirroring as it is currently implemented requires a primaryserver, a primary storage device, a backup server, a backup storagedevice and a unified operating system linking the two servers andstorage devices. The purpose of the backup server is to resume theoperations of the primary server should it become inoperational. Anexample of a mirrored server product is provided by Software FaultTolerance Level 3 (SFT III) provided by NOVELL INC., 1555 NorthTechnology Way, Orem, Utah, as an add-on to its NetWare □ 4.x product.SFT III maintains servers in an identical state of data update. Itseparates hardware-related operating system (OS) functions on themirrored servers so that a fault on one hardware platform does notaffect the other.

The server OS is designed to work in tandem with two servers. One serveris designated as a primary server, and the other is a secondary server.The primary server is the main point of update; the secondary server isin a constant state of readiness to take over. Both servers receive allupdates through a special link called a mirrored server link (MSL),which is dedicated to this purpose. The servers also communicate overthe local area network (LAN) that they share in common, so that oneknows if the other has failed even if the MSL has failed. When a failureoccurs, the second server automatically takes over without interruptingcommunications in any user-detectable way. Each server monitors theother server's NetWare Core Protocol (NCP) acknowledgments over the LANto see that all requests for that server are serviced and that OSs areconstantly maintained in a mirrored state.

When the primary server fails, the secondary server detects the failureand immediately takes over as the primary server. The failure isdetected in one or both of two ways: the MSL link generates an errorcondition when no activity is noticed, or the servers communicate overthe LAN, each one monitoring the other's NCP acknowledgment. The primaryserver is simply the first server of the pair that is brought up. Itthen becomes the server used at all times and it processes all requests.When the primary server fails, the secondary server is immediatelysubstituted as the primary server with identical configurations. Theswitch-over is handled entirely at the server end, and work continueswithout any perceivable interruption.

Although server mirroring increases security against down-time caused bya failed server, it does so at a considerable cost. This method ofproviding fault tolerance requires the additional expense and complexityof standby hardware that is not used unless there is a failure in theprimary server.

Another method of providing fault tolerance in a server network whichdoes not require additional redundant (mirrored) hardware is referred toas “clustering” the servers in the network. Under one type of clusteringmethod, a replicated Network Directory Database (NDD) operates inconjunction with server resident processes, running on a cooperating setof servers called a cluster, to remap a network resource to an alternateserver, in the event of a primary server failure. A remappable resourceis called a clustered resource. The records/objects in the replicateddatabase contain for each clustered network resource, a primary and asecondary server affiliation. Initially, all users access a networkresource through the server identified in the replicated database asbeing the primary server for the network resource. When server residentprocesses detect a failure of that primary server, the replicateddatabase is updated to reflect the failure of the primary server, and tochange the affiliation of that network resource from its primary to itsbackup server.

This remapping occurs transparently to whichever user/client isaccessing the network resource.

As a result of the remapping, all users access the clustered networkresource through the server identified in the replicated database as thebackup server for the resource. When the primary server returns toservice, the replicated resident processes detect a return to service ofthe primary server, the replicated database is again updated to reflectthe resumed operation of the primary server. As a result of these latterupdates to the replicated database, all users once again access thenetwork resource through the server identified in the replicateddatabase as the primary server for the clustered network resource. Thisremapping of clustered network resource affiliations also occurstransparently to whichever user/client is accessing the networkresource, and returns the resource to its original fault tolerant state.A further discussion of the operation and theory of clustered networksis provided in a U.S. provisional patent application, entitled,“Clustering Of Computer Systems Using Uniform Object Naming AndDistributed Software For Locating Objects,” which is listed above underthe heading “Priority claim.”

The clustering method of remapping the affiliation of a networkresource, reduces the amount of hardware, software and processingoverhead required to provide fault tolerance, when compared with themirrored server technique. However, in both of these methods andsystems, a rather inefficient and costly method of monitoring the statusof each server in the network is utilized. In order to detect that aprimary server has failed, for example, these methods require both aprimary server and a secondary server to communicate messages andcommands across a LAN line and to process received messages and commandsin accordance with a specified monitoring protocol.

One drawback of this method of providing communications between two ormore servers within a server network is that it relies on a dedicatedcommunications line, the LAN line, to communicate messages between theservers in the network. The LAN line is a valuable system resource whichshould be allocated only when necessary. Additionally, communicatingacross the LAN line is not totally reliable. If the bandwidth capacityof the LAN line is reached, or if the LAN line becomes physicallydamaged, it will not be able to handle communications from one server toanother. Therefore, in order to provide a reliable method of monitoringand/or communicating between servers, a secondary method ofcommunicating in the event that the LAN line becomes disabled istypically required. One such prior art secondary method includes a firstserver writing data, commands or information to an intermediate harddrive connected to a SCSI bus and a second server which reads the data,commands or information from the hard drive. Therefore, the hard driveserves as an intermediate depository for communicating between the SCSIadapters of two or more servers. One problem with this approach is thatit creates a dependency on that device which is often a central point offailure. For example, if the hard drive “crashes”, the two servers willnot be able to communicate with each other.

A typical prior art LAN handshake protocol between two servers includesthe following steps: a first adapter of a first server will send aNetWare□ Core Protocol (NCP) packet to a second adapter card of a secondserver in order to check whether a second server is handling all itsrequests. The first adapter card must then wait for the second adaptercard to receive the NCP signal, process it, and then send a response,which contains the intranetware address of the second adapter card. Ifthe first adapter does not receive the intranetware address data inresponse to its NCP packet, the first adapter will wait for a specifiedamount of time after which the handshake protocol “times out” and ends,resulting in a failure to achieve a communications link with the firstserver.

This approach is time-consuming and requires much “overhead” in terms ofprocessing time and logic circuitry to process and synchronize theseries of commands and data transferred between the adapters of twoservers trying to communicate with one another. Therefore, what isneeded is a method and system for establishing communications betweentwo or more servers within a server network such that the status of aserver may be monitored, events and actions initiated by the servers maybe synchronized with one another, and two or more servers maycommunicate with one another in a cost efficient and reliable manner.Additionally, such a method and system should reduce the amount ofrequired “overhead”, in terms of processing time and system resources.

SUMMARY OF THE INVENTION

The invention addresses the above and other needs by providing a methodand system of communicating between two servers of a server network soas to monitor the status of each server by the other, to time and/orsynchronize the events and actions initiated by one server with respectto the other, and further to provide bi-directional messaging capabilitybetween the two servers.

In one embodiment of the invention, a method of monitoring anoperational status of a first server with a second server, includes:successively transmitting first and second command signals to a devicecoupled to the first server, wherein the first command signal places thedevice in a first status condition and the second command signal placesthe device in a second status condition; and monitoring a statuscondition of the device with the second server, coupled to the device,wherein a change in the status condition of the device indicates thatthe first server is operational.

In another embodiment, a method of monitoring a status condition of afirst server with a second server in a server network, includes:transmitting a software-generated pulse waveform from the first serverto a device coupled to the first server, wherein the software-generatedpulse waveform comprises a first command corresponding to a logic levellow and a second command corresponding to a logic level high; settingthe device to a first state during logic level lows of the pulsewaveform and to a second state during logic level highs of the pulsewaveform; receiving the software-generated pulse waveform with thesecond server by determining when the device is in the first state andwhen it is in the second state; and determining when the device nolonger changes from the first state to the second state.

In a further embodiment, a method of monitoring a status condition of afirst server by a second server, includes: transmitting SCSI Reserve andRelease commands from the server to a SCSI device, coupled to the firstserver; and monitoring a released/reserved status of the SCSI devicewith the second server.

In yet a further embodiment, a method of assigning control over anetwork resource, includes: transmitting SCSI Reserve and Releasecommands from a first server to a SCSI device, coupled to the firstserver; monitoring a released/reserved status of the SCSI device with asecond server; determining if the first server is operational; and if itis determined that the first server has failed, assigning control overthe SCSI device to the second server.

In another embodiment, a method of synchronizing a first operationcarried out by a first server with a second operation carried out by asecond server, includes: transmitting a software-generated pulsewaveform, having a first frequency, from the first server to a devicecoupled to the first server; receiving the pulse waveform with thesecond server by monitoring a status condition of the device;transmitting from the first server a synchronization signal to thedevice by changing the frequency of the pulse waveform to a secondfrequency; detecting by the second server the synchronization signal bydetecting a change in frequency of the pulse waveform; changing at thefirst server the frequency of the pulse waveform back to the firstfrequency; detecting by the second server a change in frequency from thesecond frequency back to the first frequency; and setting in bothservers a reference point in time at a beginning of a first cycle of thepulse waveform after it has returned to the first frequency.

In yet another embodiment, a method of providing communications betweena first server and a second server, includes: transmitting a firstsoftware-generated pulse waveform from the first server to a firstdevice coupled to the first server, wherein the first pulse waveformchanges a status condition of the first device between a first state anda second state; receiving the first software-generated pulse waveformwith the second server by sampling the status condition of the firstdevice; frequency modulating the first pulse waveform so as to encode amessage into the pulse waveform; and reading the message with the secondserver by sampling the status condition of the first device at apredetermined first sampling rate.

In another embodiment, a method of providing communications between afirst server and a second server, includes: executing a first pulsetransmitter program in the first server so as to transmit a firstsoftware-generated pulse waveform from the first server to a firstdevice coupled to the first server, wherein the pulse waveform changes astatus condition of the first device between a first state and a secondstate; executing a first pulse receiver program in the second server soas to receive the first software-generated pulse waveform by samplingthe status condition of the first device; frequency modulating the firstpulse waveform so as to encode a first message into the first pulsewaveform; reading the first message with the second server by samplingthe status condition of the first device at a predetermined firstsampling rate; executing a second pulse transmitter program in thesecond server for transmitting a second software-generated pulsewaveform from the second server to a second device coupled to the secondserver, wherein the second pulse waveform changes a status condition ofthe second device between a third state and a fourth state; executing asecond pulse receiver program in the first server for receiving thesecond software-generated pulse waveform with the first server bysampling the status condition of the second device; frequency modulatingthe second pulse waveform so as to encode a second message into thesecond pulse waveform; and reading the second message with the firstserver by sampling the status condition of the second device at apredetermined second sampling rate.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram of a clustered server network having two fileservers coupled to a SCSI device in accordance with one embodiment ofthe invention.

FIG. 2 illustrates a pulse waveform representing the reserved (logichigh) and released (logic low) states of a SCSI device.

FIG. 3 is flowchart diagram illustrating the steps of one embodiment ofa pulse transmitter software program for generating a software-generatedpulse waveform in accordance with the invention.

FIG. 4 illustrates one method of sampling the software-generated pulsewaveform by determining if the SCSI device is reserved or released at apredetermined sampling frequency.

FIG. 5 is a flowchart diagram illustrating the steps of one embodimentof a pulse receiver software program for receiving thesoftware-generated pulse waveform in accordance with the invention.

FIG. 6 illustrates a pulse waveform being sampled at predeterminedreference points, 180 degrees apart on the waveform, for purposes ofmonitoring the waveform for its presence in accordance with oneembodiment of the invention.

FIG. 7 illustrates a pulse waveform being sampled at predeterminedreference points, which are several cycles apart on the waveform, forpurposes of monitoring the waveform for its presence in accordance withthe invention.

FIG. 8 is a flowchart diagram illustrating one method of monitoring thepulse waveform in accordance with one embodiment of the invention.

FIG. 9 illustrates a modulated pulse waveform which may be utilized forthe purpose of timing and/or synchronizing two servers with respect toone another in accordance with one embodiment of the invention.

FIG. 10 is a flowchart diagram illustrating one method of modulating thepulse waveform in order to provide a timing and synchronization signalfor two servers in accordance with one embodiment of the invention.

FIG. 11 illustrates a modulated pulse waveform for providing messagingcapability between two servers in accordance with one embodiment of theinvention.

FIG. 12 illustrates a messaging protocol that may be utilized by twoservers in accordance with one embodiment of the invention.

FIGS. 13A-13C together form a flowchart diagram illustrating a messagingprotocol between two servers in accordance with one embodiment of theinvention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

The invention is described in detail below with reference to thefigures, wherein like elements are referenced with like numeralsthroughout.

The invention utilizes command signals sent from a SCSI adapter card toa SCSI device in order to reserve and release access time to that deviceby that server. Referring to FIG. 1, a block diagram of one embodimentof a clustered server network 100 is illustrated. The server network 100includes a first file server computer 101 having a first SCSI hostadapter card 103 coupled thereto. The first adapter card 103 is coupledto a SCSI device 105 for communicating commands and data to and from theSCSI device 105 by means of a first SCSI bus 107. The server network 100also includes a second file server computer 109 having a second SCSIhost adapter card 111 contained therein. The second adapter card 111 isalso connected to the SCSI device 105 by means of a second SCSI bus 113.In another embodiment, each of the servers, 101 and 109, may beconnected to two or more common SCSI devices, such as SCSI device 105,in order to provide fault tolerance and redundancy in the event that theSCSI device 105 becomes inoperational or otherwise damaged.

Typically, during normal operating conditions, only one server isallowed access and control of a single SCSI device at any one time. Inorder to arbitrate access and control over a SCSI device betweenmultiple servers, a second SCSI host protocol is typically used in orderto provide this function. In such a protocol, only one server isdesignated as a host server to the SCSI device and other servers may notaccess the device when the host server is accessing or desires to accessthe device. This protocol is accomplished by the SCSI commands ofReserve Unit, Release Unit, and Test Unit Ready, which are transmittedto the SCSI device by the servers connected to that device.

However, as described above, in a clustered server network, theassignment and control of host and backup status to each of the serversin the network is accomplished by means of a cluster data softwareprogram which maps and remaps the affiliation of a particular device toa particular server. Therefore, in a clustered network, the use of theSCSI Reserve and Release commands are not necessary to establish whichserver is the host server of a particular SCSI device. Therefore, theSCSI command protocol for establishing access rights to a SCSI deviceare no longer necessary and these command signals are free to bemanipulated and utilized for other purposes.

Embodiments of the invention take advantage of these idle commandsignals and utilize the Reserve Unit, Release Unit and Test Unit Readycommands in order to communicate from one server to another. The ReserveUnit command and Release Unit command may serve as unique logic levels,while the Test Unit Ready command is used to read and monitor these“logic levels”. By manipulating the Reserve and Release commands a“software generated pulse waveform” may be created to communicatemessages from one server to another.

In order to generate this software-generated pulse waveform, at leastthe host server is encoded with a “Pulse Transmitter” software program(hereinafter “pulse transmitter” or “pulse transmitter module”) whichgenerates the Reserve and Release signals, or commands, and transmitsthem to a SCSI device. The processing time and circuitry overhead tocreate this pulse waveform is nominal. As used herein, the term “module”refers to any software program, subprogram, subroutine of a program, orsoftware code capable of performing a specified function. Also, as usedherein, the terms “command”, “signal” and “data” and any conjugationsand combinations thereof, are used synonymously and interchangeably andrefer to any information or value that may be transmitted, received orcommunicated between two electronic systems.

To further illustrate the concept of creating a software-generated pulsewaveform, reference is made to FIG. 2. In this figure, the Reservecommand is represented as a logic level high and the Release command isrepresented as a logic level low. However, it should be kept in mindthat this is only a convenient way of “labeling” these commands for thepurpose of using them as a signaling tool. These commands in actualityare streams of data which are transmitted to a SCSI device for thepurpose of reserving or releasing access to the device. As shown in FIG.2, the time that the device is reserved is represented by a logic levelhigh beginning at a rising edge 201 and ending at a falling edge 203.The period of time between the rising and falling edges 201 and 203,respectively, is referred to as the “Reservation time” (Rvt). The timethat the device is released is represented by a logic level lowbeginning at the falling edge 203 and ending at a rising edge 205. Theperiod of time between the falling and rising edges 203 and 205,respectively, is referred to as the “Release time” (Rlt). For thepurpose of providing a signal that a host server 101, is “alive” andoperational, the pulse waveform may be uniform, that is Rvt=Rlt.However, it is not required that it be uniform. For example, Rvt mayequal ½×Rlt. Furthermore, as described in further detail below, for thepurpose of providing timing and synchronization signals, and messagingcapability, this pulse waveform may be frequency modulated, for example,in order to provide messages, commands, timing reference points, etc.

In order to transmit this pulse waveform to the SCSI device, the pulsetransmitter software code makes a call to a specified SCSI driverprogram contained within a hard drive that is currently loaded in memoryand executed on the host server 101. The SCSI driver then utilizes theSCSI adapter card 103, otherwise known as the SCSI initiator or SCSIboard, to send either a Reserve or Release command to the SCSI device.

Referring to FIG. 3, a flowchart diagram of one embodiment of thesoftware code for transmitting a software pulse waveform to a SCSIdevice is illustrated. The process begins at start 300 and proceeds tostep 301 in which the pulse transmitter sends a Reserve command to thedevice. In step 303, the pulse transmitter will wait until aprespecified amount of reservation time (Rlt) has elapsed. In step 305,the pulse transmitter determines whether to continue pulse generation.If in step 305 it is determined to discontinue pulse generation, theprocess moves to step 307 where it ends. On the other hand, if in step305 it is determined that the pulse transmitter is to continue pulsegeneration, in step 309, it will send a Release command to the device.In step 311, the pulse transmitter will then wait until a prespecifiedperiod of release time (Rlt) has elapsed. In step 313, the pulsetransmitter once again determines whether to continue pulse generation.If the answer is no, the process goes to step 307 where it ends. If theanswer is yes, the process loops back to step 301 so that the abovesteps may be repeated.

In order to communicate between the host server 101 and the secondary,or backup, server 109, a “Pulse Receiver” program (hereinafter “pulsereceiver” or “pulse receiver module”) within the backup server 109 maylisten to the pulse generated by the pulse transmitter of the hostserver. Similar to the pulse transmitter within the host server 101, thepulse receiver is a software program stored within a memory of thebackup server 109 and executed by the backup server 109. To detect thestate of the pulse, the pulse receiver may send a “Test Unit Ready”command to the device 105 (FIG. 1). Upon receiving the Test command, thedevice 105 may indicate whether it is reserved, indicating a failedtest, or released, indicating a successful test by transmitting back tothe pulse receiver, response data which contains information pertainingto its reserved/released status. The rate at which the “Test Unit Ready”command is transmitted to the SCSI device 105, otherwise known as thesample rate herein, is typically much faster than the rate at which thepulse waveform changes state. Therefore, the “Test Unit Ready” commandin a sense “samples” the reservation time period (Rvt) and the releasetime period (Rlt) in order to ascertain the shape and frequency of thesoftware pulse waveform.

Referring to FIG. 4, a graphical representation of the Test Unit Readycommand sampling protocol is illustrated. The results of the Test UnitReady command are indicated by either an “S” or an “F”, wherein Sindicates a successful test when the device 105 is released by the hostserver 101 and F indicates a failed test when the device 105 is reservedby the host server 101. As shown in FIG. 4, the released status isrepresented as a logic level low at elements 401 and 403 of the softwarepulse waveform 400 and the reserved status is represented as logic levelhighs at elements 405 and 407 of the software pulse waveform 400. Abovethe pulse waveform 400, the results of the “Test Unit Ready” command areindicated by S and F, wherein S (successful test) corresponds to thereleased status and F (failed test) corresponds to the reserved status.It should be noted that since a logic level high was arbitrarilyselected as representing the reserved status and the logic level low wasarbitrarily selected as representing the released status, theserepresentations can be switched and still provide the signalingfunctionality as described above in accordance with the invention.

FIG. 5 illustrates a flowchart diagram of one embodiment of a pulsereceiving process in accordance with the invention. The process startsat 500 and proceeds to step 501 wherein the secondary server 109(FIG. 1) sends a Test Unit Ready command to the SCSI device 105 (FIG. 1)in response to which the device 105 will transmit data back to thesecondary server 109. In step 503, the secondary server 109 determineswhether the device 105 is ready to accept a SCSI command by processingthe response data received by the device 105. If the result of the TestUnit Ready command is a success, the process moves to step 505 where thesecondary server 109 records that the status of the device 105 isreleased, reflecting a “S” in the software generated pulse waveform asshown in FIG. 4. If the result of the Test Unit Ready command is afailure, the process moves to step 507 where the secondary server 109records that the status of the device 105 is reserved, reflecting a “F”in the software generated pulse waveform as shown in FIG. 4. In step509, the secondary server 109 waits until the next sample of the pulsewaveform is to be taken. In step 511, a determination is made as towhether to continue taking samples. If the answer is Yes, the processgoes back to step 501 and the above process steps are repeated. If theanswer is No, the process ends at step 513.

The foregoing describes one embodiment of a process for transmitting asoftware-generated pulse waveform by a first server 101 and receivingthe software-generated pulse waveform by a second server 109, inaccordance with the invention. Some useful applications of thesoftware-generated pulse waveform are described below.

Pulse Waveform as “Heartbeat” of Primary Server

The pulse waveform can be monitored by a secondary server to determineif a primary server is present and operational. The primary server cansend a pulse waveform to the secondary server as described above inorder to tell the secondary server that it is “alive and well”. In thisway, the pulse waveform serves as a kind of “heartbeat” of the firstserver which the second server listens for. If the pulse transmittersends a constant pulse, the waveform can be determined and predicted.This does not mean that the reservation time Rvt must be equal to therelease time Rlt, but rather all Rvt's are predictable and all Rlt's arepredictable. A pulse with a smaller Rvt minimizes the amount of time adevice is reserved, while still creating a heartbeat.

In order to determine the shape, or period, of the pulse waveform, thesecond server sends a Test Unit Ready command to a SCSI device in orderto sample the waveform as described above. The second server canascertain the cyclic period of the pulse waveform by noting thetransition points (from S to F or F to S) of the waveform and recordingthe number of samples taken between the transition points after severalsuccessive cycles of the waveform. Once the waveform is known, there isno need to keep sampling the waveform at the previous sampling rate inorder to monitor the presence of the waveform. Instead, samples can betaken out of phase from the transition points and less frequently basedon the known period of the waveform in order to ascertain its presence.By taking samples less frequently, the processing time and circuitryoverhead of this communication and monitoring method is significantlyreduced. This concept is described in greater detail below withreference to FIGS. 6 and 7.

Referring to FIG. 6, a software-generated pulse waveform is shown. Afterthe second server has determined the period of the waveform 600, it doesnot need to sample the waveform at the sampling rate. Instead the secondserver samples the waveform at a first reference point 601 and at asecond reference point 603 approximately 180° out of phase from thefirst reference point 601. Because the second server has previouslyrecorded the shape and period of the waveform, it sends a Test UnitReady command to the SCSI device at a time corresponding to thereference point 601 and expects to see an “S” (a successful test resultindicating a Released status). Similarly, at reference point 603, itexpects to see an “F” (a failed test result indicating a Reservedstatus). It is appreciated that the reduced number of Test Unit Readycommands that must be transmitted to the SCSI device and the reducednumber of results that must be subsequently processed significantlyreduces processing time and other system resources that must beallocated to perform this function.

To further decrease the overhead of monitoring the pulse waveform,samples can be taken several cycles apart on the pulse waveform as shownin FIG. 7. FIG. 7 illustrates a pulse waveform 700, wherein the secondserver samples the waveform 700 at a first reference point 701 where itexpects to see a release state. After several cycles of the waveform,the second server samples the waveform 700 at a second reference point703 where it expects to see a reserve state.

By monitoring the pulse waveform as described above, the operationalstatus of the first server can be determined by the second server. Thefirst server is considered operational if the expected results of themonitoring process are obtained. However, if the results indicate aconstant released state, either the monitoring mechanism (the referencepoints) are out of synchronization or the first server is dead and theheartbeat has flatlined. Going out of synchronization is possible, butnot common. Therefore, in one embodiment, the monitoring process of theinvention checks for this possibility by “recalibrating” the pulsereceiving process. This is done by repeating the sampling process asdescribed above with respect to FIGS. 4 and 5. In this way, the presenceof the pulse can be reverified. Once the shape and cyclic period of thepulse waveform generated by the first server has been redetermined, thesecond server can once again begin monitoring the waveform at therecalibrated reference points. However, if the pulse waveform is nolonger present, it is determined that the first server is dead. In aclustered system, the second server can send a command to the NetworkDirectory Database (NDD) to inform the NDD that it is assuming controlover the resources previously handled by the first server.

FIG. 8 illustrates a flowchart diagram of one embodiment of the processof monitoring the “heartbeat” of the first server. The process starts at800 and proceeds to step 801, where the first server executes the pulsetransmitter by sending Reserve and Release commands to the SCSI device.In step 803, the second server executes the pulse receiver by sendingTest Unit Ready commands to the SCSI device, until at least one fullcycle of the pulse waveform has been sampled. In step 805, the secondserver determines the reference points at which the pulse waveform is tobe subsequently sampled in order to monitor its presence. In step 807,the second server waits until the next reference point of the waveformis to be sampled. In step 809, the second server samples the waveform atthe reference point and determines whether the expect result wasobtained. If the expected result is obtained, the process moves to step811 wherein the second server determines whether to continue monitoringthe first server. If the answer is Yes, the process moves back to step807 and proceeds once again from this step. If the answer is No, theprocess ends at step 817.

If in step 809, the expected results are not obtained, the process movesto step 813 in which the pulse waveform, or “heartbeat” is recalibratedas described above. In step 815, the second server determines whetherthe heartbeat has flatlined, i.e., whether the pulse waveform is stillpresent. If it is determined that the heartbeat is still there, theprocess moves back to step 807 and once again proceeds from there.However, if in step 815 it is determined that the heartbeat hasflatlined, the first server is deemed dead, and the process ends at step817.

Pulse Waveform as Clock

Another use of the pulse generator is to provide a clock which may beused to synchronize time and events carried out by two or more servers.FIG. 9 illustrates one method of using the pulse waveform as asynchronizing mechanism. Based on the heartbeat design, a pulse waveform900 is generated by a first server which acts as a time master. A secondserver acts as a time slave and runs the pulse receiver program asdescribed above with respect to FIG. 5 to sample the pulse waveform.Similar in concept to a radio station sounding a bell to synchronizetime, the time master will disrupt its usual pulse waveform and send asynchronization signal. In FIG. 9, this synchronization signal isindicated by a change in frequency starting at element 901 of the pulsewaveform 900. The change in frequency may generate a pulse waveform athalf the original frequency, for example. At element 903, the slaveserver, expecting to see a logic level high but seeing a logic level lowinstead, recognizes the change in frequency and restarts sampling of thepulse waveform. At element 905 of the waveform 900, the slave serverknows the frequency of the synchronization signal. At element 907, themaster server returns to normal frequency. The slave recognizes thechange in frequency at element 909 when it expects to see a low levelbut instead sees a high level. The slave then marks the beginning ofthat cycle as “Time 0”. The beginning of each cycle thereafter issuccessively numbered as T1, T2, etc. Therefore, both the master andslave servers now have a common reference point in time, T0, which canbe used to synchronize processes and events occurring in the twoservers.

FIG. 10 shows a flowchart of one embodiment of the process ofsynchronizing two servers in accordance with the invention. The processstarts at step 1000 and proceeds to step 1010 where the first server(the time master) runs the pulse transmitter program. In step 1020, thesecond server (the time slave) runs the pulse receiver program in orderto sample and record the pulse waveform generated and transmitted by thetime master. This sampling is performed at a sampling rate, which ismuch faster than the frequency of the pulse waveform. In step 1030, themaster sends a synchronization signal by changing the frequency of thepulse waveform to one half its original frequency, for example. In step1040, the slave detects the synchronization signal. In step 1050, themaster returns to the normal frequency of the original pulse waveform.In step 1060, the slave detects the change back to the originalfrequency and marks the beginning of the first cycle of the reinstatedoriginal frequency as “Time 0”. In step 1070, the second serverdetermines if the perceived change in frequency of the pulse waveform isdue to a flatline condition of the pulse waveform. If in step 1070, itis determined that the pulse waveform has not flatlined, the processmoves to step 1080 and the master and slave servers update their timecounters and set time T0 as a common reference point in time forsynchronization purposes. The process then moves back to step 1070 andchecks whether the pulse waveform has flatlined. Each time it isdetermined that the pulse waveform is still present, the master andslave servers increment, i.e., update, their timers by one. However, ifin step 1070, it is determined that the pulse waveform has flatlined,the process ends as step 1090 and synchronization has failed.

Pulse Waveform as Messaging Device

In the embodiment described above, the communication between the twoservers is unidirectional (from master to slave) and the slave does notacknowledge synchronization with the master. A bidirectional clock canbe implemented as an enhancement to the above timing mechanism in whichthe slave can acknowledge the detection of Time 0 so that the masterreceives validation of synchronization. In a bidirectional clock system,both servers run both the pulse transmitter and the pulse receiverprograms. Also, a second SCSI device to which the second server is thehost server must be provided in order to implement bidirectionalcommunications between the first and second servers. With thisarrangement, the second server “owns” the second SCSI device andtransmits Reserve and Release commands to the second SCSI device and thefirst server samples and monitors the status of the second SCSI deviceas described above.

With a bidirectional communication protocol as described above, theinvention may also be utilized to provide not only timing andsynchronization between two servers but also messaging between the twoservers. Since the pulse waveform can be bi-directional and there are norestrictions on the waveform, a messaging protocol can be establishedbetween the two servers via the SCSI bus using frequency modulation. Asimple Request/Acknowledge protocol, with session control (the abilityfor both sides to initiate communication) may be used.

Referring to FIG. 11, one embodiment of a bi-directional pulse waveformmessage signal is illustrated. A message is incorporated into the pulsewaveform by modulating the duration or pulse width of the Reserved state(indicated by a logic level high) of the waveform. As shown in FIG. 11,a “R” is indicated at element 1101, a “T” is indicated at element 1103and a “S” is indicated at element 1105. A group of Rvt values, eachseparated by a constant Rlt make up a command or message. The messageshown in FIG. 11 is the “RTS” signal which is a request to send acommand to the other server (begin communication session). This commandsignal as well as others is described in further detail below withrespect to FIG. 12. When no communication is occurring, a uniformRvt=Rlt pulse is sent.

As mentioned above, to accommodate a bi-directional communicationmechanism, both file servers must run the pulse transmitter and pulsereceiver programs, and both servers must each “own” one device to whichit can transmit Release and Reserve commands while the other serversamples the status of that device at the sample rate. FIG. 12illustrates one example of a possible communication protocol between twofile servers. A second server 109 first sends a Request to Send (RTS)command to the first server 101. The first server 101 then responds witha Ready to Receive (RTR) signal which establishes communications betweenthe two servers. Next, the second server 109 sends a Request (REQ)signal to the first server 101. The first server 101 then sends backeither an Acknowledge (ACK) signal or Not Acknowledge (NAK) signal whichindicates that the first server 101 can or cannot process the secondserver's request. After receiving a NAK signal, the second server 109will terminate communications by sending a Relinquish (REL) to the firstserver 101. If an acknowledge (ACK) signal is sent back, the firstserver 101 will process the request signal from the second server 109and send a Result (RES) signal to the second server 109 after which thesecond server terminates communications by sending a Relinquish (REL)signal to the first server 101.

The following is a summary of the messages/commands discussed above:

RTS: Request to send a command to the other file server (begincommunication session).

RTR: Ready to receive—other server agrees to accept a command.

REQ: The command requesting certain actions/data on the part of thereceiving server (defined by application).

ACK: The other server acknowledges the arrival and ability to servicethe command.

NAK: The other server does not support that command.

RES: The results of the command.

REL: The initiating server relinquishes control (end of session).

Referring to FIGS. 13A-13C a flowchart diagram of one embodiment of abi-directional communication protocol in accordance with the inventionis illustrated. The process starts at 1300 and proceeds to step 1301wherein both servers start running the pulse transmitter program togenerate a uniform pulse waveform wherein Rvt=Rlt. In step 1303, bothservers initiate the pulse receiver program to continuously sample thepulse waveform generated by the other server. As used herein the term“continuous sampling” means that the pulse receiver is sampling thepulse waveform at every “tick” or cycle of the sampling frequency, whichis greater than the frequency of the pulse waveform, in order todetermine the shape and frequency of the waveform, rather than samplingat only select reference points of the waveform for monitoring purposes.

In order to simplify the discussion, the following description of theremaining portions of the flowchart is provided from the perspective ofonly one of the two servers, the first server. However, it is understoodthat the roles of the first and second servers are interchangeable inthe following discussion. In step 1305, the first server determineswhether it has a message to send to the second server. If the firstserver does not have a message queued to send to the second server, theprocess moves to step 1307 wherein the first server determines whether aRequest to Send (RTS) command has been sent by the second server. If thefirst server has not received a RTS signal from the second server, theprocess returns to step 1305, wherein the first server continues to pollitself as to whether it has a message to send to the second server. Ifin step 1307, it is determined that the second server has sent a RTSsignal to the first server, the process moves to step 1309 as shown inFIG. 13B. In step 1309, the first server sends back a Ready to Receive(RTR) signal to the second server, agreeing to accept a command from thesecond server. Thereafter, in step 1311, the first server receives therequest (command) from the second server and decodes the request. Instep 1313, the first server determines whether it can support oraccommodate the request from the second server. If it is determined thatthe first server can support the request, in step 1315, the first serversends an acknowledgement (ACK) signal to the second server. In step1317, the first server passes the request up to an application softwareprogram running on the first server to process the request. In step1319, the first server sends the results of the application program tothe second server. In step 1321, the first server waits for a relinquish(REL) signal from the second server which terminates communicationsbetween the two servers and sends the process back to step 1305 of FIG.13A at which point the first server once again resumes polling whetherit has a message to send to the second server.

If in step 1313, the first server determines that it does not supportthe request sent by the second server, in step 1323, the first serversends a Not Acknowledge (NAK) signal to the second server which informsthe second server that the first server does not support that command.The process then moves back to step 1305 wherein the first servercontinues to poll itself as to whether it has a message to send to thesecond server.

If in step 1305, the first server determines that it has a messagequeued to be sent to the second server, the process moves to step 1325of FIG. 13C. In step 1325, the first server sends a Request to Send(RTS) signal to the second server which requests the second server toaccept a command from the first server. In step 1327, the first serverwill wait for a Ready to Receive (RTR) from the second server. In step1329, the first server determines if a timeout period has expired. Ifthe timeout period has expired before a RTR signal is received from thesecond server, the process moves to step 1331 in which the first serverpasses an error message to application software indicating that thesecond server is not responding. The process then moves back to step1305 of FIG. 13A.

If in step 1329, the first server receives a RTR signal from the secondserver before the timeout period expires, the process moves to step 1333in which the first server will send a request, or command, to the secondserver. In step 1335, the first server determines whether an acknowledge(ACK) signal has been returned by the second server. If the secondserver does not send an ACK signal or, instead, sends back a NotAcknowledge (NAK) signal, the process moves back to step 1331 in whichthe first server sends an error signal to the application softwareindicating that the second server does not support the request. However,if in step 1335, the first server receives the ACK signal from thesecond server, the process moves to step 1337 in which the first serverreceives the response (RES) signal(s) from the second server and passesthe response to application software for processing. Thereafter, in step1339, the first server sends a relinquish (REL) signal to the secondserver thereby terminating communications with the second server. Theprocess then moves back to step 1305 wherein the first server determineswhether it has a message to send. If not, in step 1307, the first serverdetermines if the second server wants to send it a message. This processmay be recursive and continue to execute until it is terminated by eachof the servers.

As described above, the invention provides an efficient and reliablemethod and system for communicating between two servers in a servernetwork. Because the communication method and system does not transmitdata to be stored in an intermediate device, such as a hard disk drive,it does not depend on the presence or operational status of such adevice. Rather, some embodiments of the invention take advantage of anexisting protocol for establishing control of a SCSI device, namely, theReserve and Release commands sent by a host server to a SCSI device. Bysampling and monitoring the Reserve and Release status of the SCSIdevice by a second server which is also coupled to the device, thesecond device can monitor the presence and operational status of thehost server, without directly communicating to the host server via anintermediate disk drive as is done in prior art systems. The Reserve andRelease status of the SCSI device is used to generate asoftware-generated pulse waveform which serves as a sort of “heartbeat”of the host server and which can be monitored by the second server.Because the Reserve and Release commands are already implemented inexisting SCSI device protocols, the method and system of the invention,once established, requires very little overhead, in terms of processingtime and system resources, and is inexpensive to implement.

Because there are no limitations as to the shape and frequency of thesoftware generated pulse waveform, the waveform may be frequencymodulated in order to provide timing and synchronization signals to twoservers. Additionally, by implementing each server as both a sender ofReserve and Release commands to a respective SCSI device, and a monitorof a the respective SCSI device, bi-directional communications can beestablished between the two servers. This method and system ofcommunication between two servers is further advantageous in that it maybe implemented with existing resources and command protocols between aserver and a SCSI device and, additionally, it can be turned on and offas desired.

The invention may be embodied in other specific forms without departingfrom its spirit or essential characteristics. The described embodimentsare to be considered in all respects only as illustrative and notrestrictive. The scope of the invention is, therefore, indicated by theappended claims, rather than by the foregoing description. All changeswhich come within the meaning and range of equivalency of the claims areto be embraced within their scope.

1. A method of determining the status of a server comprising:transmitting status commands from a first server to a device which iscoupled to the first server; monitoring with a second server the statusof the device; and determining with the second server the status of thefirst server based on the status of the device.
 2. The method of claim 1wherein a changing device status indicates that the first server remainsoperational.
 3. The method of claim 1 wherein a constant device statusindicates that the first server has failed.
 4. The method of claim 1wherein the first server controls at least one network resource.
 5. Themethod of claim 4 further comprising assigning control of the networkresource to the second server based on the status of the device.
 6. Themethod of claim 1 wherein the status commands comprise a pulse waveform.7. The method of claim 1 wherein the status commands comprise reserveand release commands.
 8. The method of claim 1 wherein the device is aSCSI device.
 9. An apparatus for determining the status of a servercomprising: a first server that is configured to transmit statuscommands to a device which is coupled to the first server; and a secondserver that is configured to monitor the status of the device andwherein the second server is further configured to determine the statusof the first server based on the status of the device.
 10. The apparatusof claim 9 wherein a changing device status indicates that the firstserver remains operational.
 11. The apparatus of claim 9 wherein aconstant device status indicates that the first server has failed. 12.The apparatus of claim 9 wherein the first server controls at least onenetwork resource.
 13. The apparatus of claim 12 wherein control of thenetwork resource is assigned to the second server based on the status ofthe device.
 14. The apparatus of claim 9 wherein the status commandscomprise a pulse waveform.
 15. The apparatus of claim 9 wherein thestatus commands comprise reserve and release commands.
 16. The apparatusof claim 9 wherein the device is a SCSI device.
 17. An apparatus fordetermining the status of a server comprising: means for transmittingstatus commands from a first server to a device which is coupled to thefirst server; means for monitoring the status of the device; and meansfor determining with a second server the status of the first serverbased on the status of the device.
 18. The apparatus of claim 17 whereina changing device status indicates that the first server remainsoperational.
 19. The apparatus of claim 17 wherein a constant devicestatus indicates that the first server has failed.
 20. The apparatus ofclaim 17 wherein the first server controls of at least one networkresource.
 21. The apparatus of claim 17 further comprising assigningcontrol of the network resource to the second server based on the statusof the device.
 22. The apparatus of claim 17 wherein the status commandscomprise a pulse waveform.
 23. The apparatus of claim 17 wherein thestatus commands comprise reserve and release commands.
 24. The apparatusof claim 17 wherein the device is a SCSI device.